package com.club.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.club.entity.ActivitySignUp;

import java.util.List;

/**
 * 活动报名服务接口
 */
public interface ActivitySignUpService extends IService<ActivitySignUp> {
    
    /**
     * 报名活动
     * @param activitySignUp 报名信息
     * @return 是否报名成功
     */
    boolean signUp(ActivitySignUp activitySignUp);
    
    /**
     * 取消报名
     * @param activityId 活动ID
     * @param userId 用户ID
     * @return 是否取消成功
     */
    boolean cancelSignUp(Long activityId, Long userId);
    
    /**
     * 审核报名
     * @param id 报名记录ID
     * @param status 状态
     * @param remark 备注
     * @return 是否审核成功
     */
    boolean auditSignUp(Long id, Integer status, String remark);
    
    /**
     * 根据活动ID查询报名列表
     * @param activityId 活动ID
     * @return 报名列表
     */
    List<ActivitySignUp> getSignUpsByActivityId(Long activityId);
    
    /**
     * 根据用户ID查询报名列表
     * @param userId 用户ID
     * @return 报名列表
     */
    List<ActivitySignUp> getSignUpsByUserId(Long userId);
    
    /**
     * 查询用户在指定活动的报名信息
     * @param activityId 活动ID
     * @param userId 用户ID
     * @return 报名信息
     */
    ActivitySignUp getSignUpByActivityAndUser(Long activityId, Long userId);
    
    /**
     * 检查用户是否已报名活动
     * @param activityId 活动ID
     * @param userId 用户ID
     * @return 是否已报名
     */
    boolean isSignedUp(Long activityId, Long userId);
    
    /**
     * 获取活动报名人数
     * @param activityId 活动ID
     * @param status 状态（可选）
     * @return 报名人数
     */
    int getSignUpCount(Long activityId, Integer status);
}